#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;

void solve()
{
	int n;
	cin >> n;
	int k = n;
	vector<ll> v1;
	while (k--)
	{
		ll tmp;
		cin >> tmp;
		v1.push_back(tmp);

	}
	if (v1.size() == 1)
	{
		cout << "YES" << endl;
		return;
	}

	for (int i = 1; i <= n; i++)
	{
		if (i+1<n&&v1[i] > v1[i + 1] && v1[i] > v1[i - 1])
		{
			cout << "NO" << endl;
			return;
		}

		if (i+1<n&&(v1[i]>v1[i + 1] && v1[i]==v1[i - 1]))
		{
			if (i - 1 != 0)
			{
				for (int j = i - 1; j >=0; j--)
				{
					if (v1[i] < v1[j])
						break;
					if (v1[i] > v1[j])
					{
						cout << "NO" <<endl;
						return;
					}
				}
			}
		}

		if (i+1<n&&(v1[i] == v1[i+1] && v1[i]>v1[i - 1]))
		{
			if (i + 1 != n)
			{
				for (int j = i + 1; j < n; j++)
				{
					if (v1[i] < v1[j])
						break;
				if (v1[i] > v1[j])
					{
						cout << "NO" << endl;
						return;
					}
				}
			}

		}
	}
	cout << "YES" << endl;
}

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		solve();
	}

	return 0;
}

// #include<bits/stdc++.h>
// using namespace std;
// typedef long long int ll;

// int maxSum(vector<vector<int>>&grid)
// {
// 	int ans;
//     int hang=grid.size();//行
//     int lie=grid[0].size();//列

//     int top=0;//左上
//     int low=2;//左下

//     int flag=0;

//     while(low<hang)
//     {
//     	int head=0;
//     	int tail=2;

//     	int tmp;
//     	while(tail<lie)
//     	{
//     		tmp=grid[top][head]+grid[top][head+1]+grid[top][head+2];//赋值加清除的效果
//     		tmp+=grid[top+1][head+1];
//     		tmp+=grid[top+2][head]+grid[top+2][head+1]+grid[top+2][head+2];
//     		flag++;
//     		tail++;
//     		head++;

//     		if(flag==1)
//     			ans=tmp;
//     		else if(tmp>ans)
//     			ans=tmp;
//     	}

//     	top++;
//     	low++;
//     }
//     return ans;
// }



